#include <stdio.h>
#include <signal.h>
#include <iostream>
void print_pending()
{
    // 获取pending
    sigset_t set;
    sigpending(&set);
    //输出位图
    for (int i = 31; i >= 1; i--)
    {
        if (sigismember(&set, i))
            std::cout << '1';
        else
            std::cout << '0';
    }
    std::cout << std::endl;
}
void handler(int sig)
{
    std::cout << "receive sig : " << sig << std::endl;
}

int main()
{
    //自定义捕捉2号信号
    signal(2, handler);
    //屏蔽2号信号
    sigset_t set, oldset;
    sigemptyset(&set);
    sigaddset(&set,2);
    sigprocmask(SIG_BLOCK, &set, &oldset);

    int cnt = 10;
    while(cnt--)
    {
        //输出pending表
        print_pending();

        if(cnt == 0)
        {
            //解除对2号信号的屏蔽
            sigemptyset(&set);
            sigprocmask(SIG_SETMASK, &oldset,nullptr);
        }
        sleep(1);
    }
    return 0;
}

// int main()
// {
//     sigset_t set;
//     sigemptyset(&set);
//     sigaddset(&set, 2);
//     sigset_t oldset;
//     sigprocmask(SIG_BLOCK, &set, &oldset);
//     while (true)
//     {
//     }
//     return 0;
// }

// int main()
// {
//     sigset_t st;
//     // sigfillset(&st);
//     // sigemptyset(&st);
//     std::cout << st.__val << std::endl;
//     return 0;
// }

// void handle(int sig)
// {
//     std::cout << sig << std::endl;
// }
// int main()
// {
//     signal(2, handle);
//     int id = getpid();
//     kill(id,2);
//     raise(2);
//     abort();
//     return 0;
// }
